iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
0

20191007

前言

今天的內容一樣是代辦清單的實作,要將元件與程式碼做連結, 並且開始操作『Realm』。

現在,我們馬上開始!

練習紀錄

連結元件與程式碼

  1. 新增『Create, Edit』兩個(UIVicontroller)類別

  1. 將畫面的class,(各別)設定為前面新增的兩個類別

  1. 由於Xcode更新了,剛開始有點找不到,後來發現在畫面中間上面的選單,點選之後在選擇『Assistant』即可

如果要回復一個畫面,請點選『Show Editor Only』

  1. 首先點選元件(textField),接者滑鼠右鍵(或是cmd + 滑鼠左鍵)拉到程式碼中,輸入名稱後,按下『Connect』即可

通常Outlet都是會針對屬性去設定或取值
而Action都是會觸發動作的,例如按鈕點擊 (如下圖)

  1. 要連結的元件就不一一示範了,細節請參考Github

Realm 操作

  1. 首先要定義Model
class ToDoList: Object {
    @objc private(set) dynamic var id:String = UUID().uuidString
    @objc dynamic var content:String = ""
    @objc dynamic var startTime:Date = Date()
    @objc dynamic var endTime:Date? = nil
    @objc dynamic var category:String = "work"
    @objc dynamic var status:String = "\(Status.ongoing)"
    @objc dynamic var LastModify:Date = Date()
    
    // primary key
    override static func primaryKey() -> String {
        return "id"
    }
}

enum Status {
    case ongoing, done, deleted
}
  • 使用UUID().uuidString 『id』作為主鍵

  • 定義一個enum用來存放狀態,目前有三種

  1. 撰寫新增寫入realm的程式碼
@IBAction func addButtonPressed(_ sender: UIButton) {
    guard let content = taskTextField.text else { return }
    if !content.isEmpty {
        let realm = try! Realm()
        let todoList = ToDoList()
        todoList.content = content
        
        try! realm.write {
            realm.add(todoList)
        }
        
        // return List
        navigationController?.popViewController(animated: true)
    }
}
  • 使用一個realm實例來新增資料,後續有空重構時,可以改用singleton pattern

  • 轉換回原場景使用navigationController?.popViewController()方法

  1. 由於List頁面尚未實作,因此先把存入realm資料庫的資料印出來
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    
    let realm = try! Realm()
    let todoList = realm.objects(ToDoList.self)
    for todo in todoList {
        print(todo)
    }
}
  • 由於畫面尚未實作,先透過console來觀察(如下圖)

  1. 同時參考官方文件,列印Realm的存放路徑
// Get our Realm file's parent directory
let folderPath = realm.configuration.fileURL!.deletingLastPathComponent().path
        
print(folderPath)

  • 首先將路徑複製起來,並在終端機使用『cd 路徑』切換到該路徑,接者輸入『open .』來打開Finder

  • 請先確認有安裝 Realm Studio 工具軟體 (ref6)

  • 直接點兩下開啟該文件

  • 使用Realm Studio開啟後,我們就可以刪除/修改我們的測試資料了

  • 新增當然也沒有問題

總結

今天我們練習了,如何建立Realm的Model,並寫入測試資料,以及如何透過Realm Studio,來讀取模擬器中的資料庫。發現其實官方文件的用法與各種操作,已經寫得非常詳細與清楚。

而資料表的設計一開始在考慮使用一直加一的id主健(ref5),後來直接使用UID().uuidStringUID。
明天的文章將會繼續實作List & Edit的資料。

今天的內容就到這邊,感謝讀者們的閱讀。


Github:

https://github.com/chiron-wang/IT30_11

參考資料與延伸閱讀

  1. 深入淺出 iPhone 開發 (使用 Swift4) - WeiWei
    https://www.udemy.com/course/iphone-swift4/

  2. iOS 12 App 開發快速入門與實戰(繁體中文)
    https://www.udemy.com/course/ios-12-app/

  3. 心智圖軟體Xmind
    https://www.xmind.net/

[Realm]

  1. [Swift] Realm.io 資料庫介紹 - 其之一:初探CRUD
    https://ithelp.ithome.com.tw/articles/10183329

  2. Auto increment ID in Realm, Swift 3.0
    https://stackoverflow.com/questions/39579025/auto-increment-id-in-realm-swift-3-0

  3. Realm Studio
    https://realm.io/docs/swift/latest/#realm-studio


上一篇
Day20 待辦清單 (2)
下一篇
Day22 待辦清單 (4)
系列文
iOS App 實作開發新手村36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言